Computer memory interleaving is the process of spreading memory references across multiple memory banks to increase throughput of the memory system. Interleaving may be accomplished by computer hardware called an interleaver that translates physical addresses such as those from the processor into a specific location in a memory bank.
Typically, memory access may be interleaved across a number of memory banks, where the number of memory banks may change. For example, since a memory bank is associated with computer hardware such as a memory board, the number of memory boards in a computer may be altered over the life of the computer. Therefore, variable requirements related to the number of memory banks may be accommodated by software or firmware configuration operations. That is, software may write configuration information to control registers of the interleaver that manage the manner of dividing the address space among the memory banks. This configuration information is used by the interleaver to translate physical addresses into memory bank labels and memory bank offsets. It will be appreciated by those skilled in the art that offsets may be used to locate specific addresses within a range of addresses.
Generally, when the number of memory banks is not a power of two, current interleavers operate by approximating the number of memory banks available for interleaving to the nearest power of two that is not greater than the actual number of available memory banks. Typically the full potential for improving throughput of memory access by interleaving is not realized by interleaving over a smaller, power of two, number of memory banks.
Some interleavers are flexible and may allow variation in the degree of interleave, the size of the range of addresses, or the values that may be loaded in a bank list. However, configuration operations of current interleavers do not take advantage of some of the flexible features of this type of interleaver.
Further during the configuration process, some current interleavers operate by requiring as many configuration entries as there are available memory banks. Since the resources available to the interleaver for configuration is fixed and small, reduction of the number of configuration entries would improve the efficiency of interleaving.